const app = getApp()
const { getUserProfile } = require('../../utils/request')

Page({
  /**
   * 页面的初始数据
   * userInfo: 用户基本信息对象
   * healthServices: 健康服务选项数组
   * tools: 常用工具选项数组
   * settings: 设置选项数组
   * riskColorMap: 风险等级对应的颜色映射
   * userClassifications: 用户分类状态对象
   */
  data: {
    userInfo: {
      nickname: '未设置昵称',
      userId: 'N/A',
      avatar: '/assets/images/default_avatar.png'
    },
    // 健康服务模块选项
    healthServices: [
      // 移除未实装的功能
    ],
    // 工具模块选项
    tools: [
      { id: 1, name: '监测方案', icon: '/images/tools/monitor.png', type: 'monitor' },
      { id: 2, name: '控糖目标', icon: '/images/tools/target.png', type: 'target' },
      { id: 3, name: '我的设备', icon: '/images/tools/device.png', type: 'device' },
      { id: 4, name: '提醒设置', icon: '/images/tools/remind.png', type: 'remind' },
      { id: 5, name: '健康咨询', icon: '/images/tools/consult.png', type: 'consult' },
      { id: 6, name: '数据导出', icon: '/images/tools/export.png', type: 'export' }
    ],
    // 设置模块选项
    settings: [
      { id: 1, name: '个人信息', type: 'userInfo' },
      { id: 2, name: '用户分类', type: 'userCategory' },
      { id: 3, name: '健康目标', type: 'healthTarget' },
      { id: 4, name: '隐私设置', type: 'privacy' },
      { id: 5, name: '注销账号', type: 'logout' }
    ],
    // 风险颜色映射
    riskColorMap: {
      low: '#52c41a',    // 低风险 - 绿色
      medium: '#faad14', // 中风险 - 黄色
      high: '#f5222d',   // 高风险 - 红色
      unknown: '#999999' // 未知风险 - 灰色
    },
    // 用户分类状态
    userClassifications: {
      hasDiabetes: false,      // 是否有糖尿病
      hasHypertension: false,  // 是否有高血压
      isPregnant: false,       // 是否怀孕
      isElderly: false,        // 是否老年人
      isHighRisk: false        // 是否高风险人群
    },
    healthInfo: {
      riskScore: 'N/A',
      riskLevel: 'unknown',
      height: null,
      diabetesType: '无',
      diagnosisDate: null,
      gender: '保密'
    }, // 健康信息
    // 最新健康数据
    latestData: {
      glucose: null,
      systolic: null,
      diastolic: null,
      weight: null
    },
    // 预防方案相关
    planCompletion: 65,
    dietPlanCompleted: true,
    exercisePlanCompleted: false,
    monitoringPlanCompleted: false,
    
    // 知识科普
    knowledgeItems: [
      {
        id: 1,
        title: '糖尿病前期该如何预防转化为糖尿病',
        category: '饮食',
        time: '2小时前',
        image: '/images/knowledge/diet.jpg'
      },
      {
        id: 2,
        title: '老年人糖尿病如何科学运动',
        category: '运动',
        time: '昨天',
        image: '/images/knowledge/exercise.jpg'
      }
    ],
    
    hasUnreadNotice: false,
    lastDataUpdateTime: '',
    lastAssessmentTime: '2023-11-20',
    riskDescription: '您目前处于低风险状态，请继续保持健康生活方式',
    isDevEnv: false,
    envInfo: 'dev'
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 检查是否显示开发者选项
    const app = getApp();
    const isDevEnv = app.globalData.envVersion === 'develop';
    this.setData({
      isDevEnv: isDevEnv,
      envInfo: app.globalData.envType || 'dev'
    });
    
    // 初始化页面
    // 更新用户信息
    this.updateUserInfo()
    
    // 获取最新健康数据
    this.getLatestHealthData()
    
    // 获取预防方案完成情况
    this.getPreventionPlanStatus()
    
    // 获取知识科普内容
    this.getKnowledgeContent()
    
    // 检查是否有未读通知
    this.checkUnreadNotices()
    
    // 延时获取风险评估信息，确保在其他数据加载完成后执行
    setTimeout(() => {
      this.getRiskAssessmentInfo();
    }, 500);
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 更新用户信息
    this.updateUserInfo()
    
    // 更新健康数据
    this.getLatestHealthData()
    
    // 更新预防方案状态
    this.getPreventionPlanStatus()
    
    // 获取风险评估信息
    this.getRiskAssessmentInfo()
    
    // 监听来自用户详情页的数据变更事件
    try {
      const eventChannel = this.getOpenerEventChannel()
      if (eventChannel && typeof eventChannel.on === 'function') {
        eventChannel.on('userDetailDataChanged', (data) => {
          if (data && data.changed) {
            wx.showToast({
              title: data.message || '个人信息已更新',
              icon: 'none',
              duration: 2000
            })
          }
        })
      }
    } catch (error) {
      console.log('无事件通道或不是通过navigator跳转', error)
    }
    
    // 更新底部TabBar选中状态
    if (typeof this.getTabBar === 'function' && this.getTabBar()) {
      this.getTabBar().setData({
        selected: 3
      });
    }
  },
  
  /**
   * 获取最新健康数据
   */
  async getLatestHealthData() {
    try {
      // 模拟数据 - 实际项目中替换为API调用
      this.setData({
        latestData: {
          glucose: 5.6,
          systolic: 125,
          diastolic: 85,
          weight: 68.5
        }
      })
      
      // API调用示例
      /*
      // 获取最新血糖数据
      const glucoseData = await api.glucose.getLatestRecord()
      
      // 获取最新血压数据
      const bloodPressureData = await api.bloodPressure.getLatestRecord()
      
      // 获取最新体重数据
      const weightData = await api.weight.getLatestRecord()
      
      this.setData({
        latestData: {
          glucose: glucoseData ? glucoseData.value : null,
          systolic: bloodPressureData ? bloodPressureData.systolic : null,
          diastolic: bloodPressureData ? bloodPressureData.diastolic : null,
          weight: weightData ? weightData.value : null
        }
      })
      */
    } catch (err) {
      console.error('获取最新健康数据失败:', err)
    }
  },
  
  /**
   * 获取预防方案完成情况
   */
  async getPreventionPlanStatus() {
    try {
      // 模拟数据 - 实际项目中替换为API调用
      this.setData({
        planCompletion: 65,
        dietPlanCompleted: true,
        exercisePlanCompleted: false,
        monitoringPlanCompleted: false
      })
      
      // API调用示例
      /*
      // 获取用户预防方案状态
      const preventionPlan = await api.preventionPlan.getUserPlan()
      
      if (preventionPlan) {
        // 计算总体完成进度
        const dietProgress = preventionPlan.diet ? preventionPlan.diet.progress : 0
        const exerciseProgress = preventionPlan.exercise ? preventionPlan.exercise.progress : 0
        const monitoringProgress = preventionPlan.monitoring ? preventionPlan.monitoring.progress : 0
        
        const totalProgress = Math.round((dietProgress + exerciseProgress + monitoringProgress) / 3)
        
        this.setData({
          planCompletion: totalProgress,
          dietPlanCompleted: dietProgress === 100,
          exercisePlanCompleted: exerciseProgress === 100,
          monitoringPlanCompleted: monitoringProgress === 100
        })
      }
      */
    } catch (err) {
      console.error('获取预防方案状态失败:', err)
    }
  },
  
  /**
   * 获取风险评估信息
   */
  async getRiskAssessmentInfo() {
    try {
      // 导入风险评估API
      const riskAssessmentApi = require('../../utils/api/riskAssessment');
      
      // 调用API获取最新风险评估记录
      const latestAssessment = await riskAssessmentApi.getLatestAssessment();
      console.log('获取到风险评估数据:', latestAssessment);
      
      if (latestAssessment && latestAssessment.success && latestAssessment.data) {
        // 有风险评估记录
        const { result, timestamp } = latestAssessment.data;
        console.log('风险评估结果:', result);
        
        // 格式化评估时间
        const assessmentDate = new Date(timestamp);
        const formattedDate = `${assessmentDate.getFullYear()}-${(assessmentDate.getMonth() + 1).toString().padStart(2, '0')}-${assessmentDate.getDate().toString().padStart(2, '0')}`;
        
        // 获取风险等级和概率 - 中英文映射
        const riskLevelMap = {
          '高风险': 'high',
          '中风险': 'medium',
          '低风险': 'low'
        };
        
        // 中文风险等级转换为英文，用于CSS类
        const riskLevel = riskLevelMap[result.riskLevel] || 'unknown';
        
        // 将概率值转为百分比并保留一位小数
        const riskScore = result.probability ? (result.probability * 100).toFixed(1) : 0;
        
        // 根据风险等级生成描述
        let riskDesc = '';
        if (riskLevel === 'low') {
          riskDesc = '您目前处于低风险状态，请继续保持健康生活方式';
        } else if (riskLevel === 'medium') {
          riskDesc = '您处于中等风险状态，建议定期监测血糖';
        } else if (riskLevel === 'high') {
          riskDesc = '您处于高风险状态，请严格遵循预防方案';
        } else {
          riskDesc = '点击进行风险评估';
        }
        
        // 创建更新数据对象
        const updatedData = {
          lastAssessmentTime: formattedDate,
          healthInfo: {
            ...this.data.healthInfo, // 保留其他健康信息
            riskScore: riskScore,
            riskLevel: riskLevel
          },
          riskDescription: riskDesc
        };
        
        // 一次性更新数据
        this.setData(updatedData);
        
        console.log('设置风险评估数据:', {
          lastAssessmentTime: formattedDate,
          riskScore: riskScore,
          riskLevel: riskLevel,
          riskDescription: riskDesc
        });
      } else {
        console.log('没有风险评估记录，使用默认值');
        // 没有风险评估记录，设置默认值
        this.setData({
          lastAssessmentTime: '暂无评估',
          healthInfo: {
            ...this.data.healthInfo,
            riskScore: 'N/A',
            riskLevel: 'unknown'
          },
          riskDescription: '点击进行风险评估'
        });
      }
    } catch (err) {
      console.error('获取风险评估信息失败:', err);
      // 异常情况，使用模拟数据
      console.log('使用模拟数据作为备用');
      this.setData({
        lastAssessmentTime: '2023-11-20',
        healthInfo: {
          ...this.data.healthInfo,
          riskScore: 28,
          riskLevel: 'low'
        },
        riskDescription: '您目前处于低风险状态，请继续保持健康生活方式'
      });
    }
  },
  
  /**
   * 获取知识科普内容
   */
  async getKnowledgeContent() {
    try {
      // 模拟数据 - 实际项目中替换为API调用
      /*
      // 获取推荐的知识内容
      const knowledgeList = await api.knowledge.getRecommendedContent()
      
      if (knowledgeList && knowledgeList.length > 0) {
        // 只显示前两条知识内容
        const formattedList = knowledgeList.slice(0, 2).map(item => {
          // 格式化时间显示
          const timeStr = this.formatKnowledgeTime(item.publishTime)
          
          return {
            id: item.id,
            title: item.title,
            category: item.category,
            time: timeStr,
            image: item.coverImage || `/images/knowledge/${item.category}.jpg`
          }
        })
        
        this.setData({
          knowledgeItems: formattedList
        })
      }
      */
    } catch (err) {
      console.error('获取知识内容失败:', err)
    }
  },
  
  /**
   * 格式化知识发布时间
   */
  formatKnowledgeTime(timestamp) {
    const now = new Date()
    const publishTime = new Date(timestamp)
    const diff = now - publishTime
    
    // 1小时内
    if (diff < 3600000) {
      const minutes = Math.floor(diff / 60000)
      return `${minutes}分钟前`
    }
    // 24小时内
    else if (diff < 86400000) {
      const hours = Math.floor(diff / 3600000)
      return `${hours}小时前`
    }
    // 昨天
    else if (diff < 172800000) {
      return '昨天'
    }
    // 一周内
    else if (diff < 604800000) {
      const days = Math.floor(diff / 86400000)
      return `${days}天前`
    }
    // 超过一周
    else {
      return `${publishTime.getMonth() + 1}月${publishTime.getDate()}日`
    }
  },
  
  /**
   * 监听数据更新事件
   * 用于检测健康数据的变更，例如新记录添加
   */
  listenForDataChanges() {
    // 获取上次数据更新时间
    wx.getStorage({
      key: 'dataUpdateEvents',
      success: (res) => {
        const events = res.data || {}
        // 找到最新的更新时间
        let lastUpdate = 0
        for (const key in events) {
          if (events[key] > lastUpdate) {
            lastUpdate = events[key]
          }
        }
        
        if (lastUpdate > 0) {
          // 格式化时间为易读格式
          const date = new Date(lastUpdate)
          const formattedTime = `${date.getMonth() + 1}月${date.getDate()}日 ${date.getHours()}:${date.getMinutes()}`
          this.setData({
            lastDataUpdateTime: formattedTime
          })
        }
      }
    })
  },
  
  /**
   * 检查是否有未读通知
   */
  checkUnreadNotices() {
    wx.getStorage({
      key: 'notifications',
      success: (res) => {
        const notifications = res.data || []
        // 检查是否有未读通知
        const hasUnread = notifications.some(notification => !notification.read)
        this.setData({
          hasUnreadNotice: hasUnread
        })
      }
    })
  },

  /**
   * 更新用户信息
   * 从API获取最新的用户信息和健康信息
   */
  async updateUserInfo() {
    try {
      // 显示加载提示
      wx.showLoading({
        title: '加载中...'
      })
      
      // 使用新的API调用获取用户信息
      const result = await getUserProfile()
      
      if (result.success) {
        const userInfo = result.data
        
        // 更新全局数据
        app.globalData.userInfo = userInfo
        
        // 格式化用户信息以适应UI
        const formattedUserInfo = {
          nickname: userInfo.nickname || userInfo.username || '未设置昵称',
          userId: userInfo._id || 'N/A',
          avatar: userInfo.avatarUrl || '/assets/images/default_avatar.png',
          // 可以添加其他需要的字段
        }
        
        // 保存当前风险评估信息，防止被覆盖
        const currentRiskInfo = {
          riskScore: this.data.healthInfo?.riskScore || 'N/A',
          riskLevel: this.data.healthInfo?.riskLevel || 'unknown'
        };
        
        console.log('更新用户信息前，保存当前风险数据:', currentRiskInfo);
        
        // 更新页面数据
        this.setData({ 
          userInfo: formattedUserInfo,
          healthInfo: {
            height: userInfo.height || null,
            diabetesType: userInfo.diabetesType || '无',
            diagnosisDate: userInfo.diagnosisDate || null,
            gender: userInfo.gender || '保密',
            // 保留风险评估数据
            riskScore: currentRiskInfo.riskScore,
            riskLevel: currentRiskInfo.riskLevel
          },
          // 暂时使用模拟数据，后续可以通过API获取
          userClassifications: {
            hasDiabetes: userInfo.diabetesType !== '无',
            hasHypertension: false,
            isPregnant: false,
            isElderly: false,
            isHighRisk: false
          }
        })
        
        console.log('更新用户信息后，健康数据:', this.data.healthInfo);
      } else {
        wx.showToast({
          title: '获取用户信息失败',
          icon: 'none'
        })
      }
      
      // 隐藏加载提示
      wx.hideLoading()
    } catch (err) {
      // 隐藏加载提示
      wx.hideLoading()
      
      console.error('获取用户信息失败:', err)
      wx.showToast({
        title: '获取用户信息失败',
        icon: 'none'
      })
    }
  },

  /**
   * 跳转到用户详情页
   */
  goToUserDetail() {
    wx.navigateTo({ url: '/pages/userDetail/userDetail' })
  },
  
  /**
   * 跳转到风险评估页面
   */
  goToRiskAssessment() {
    wx.navigateTo({ url: '/pages/riskAssessment/riskAssessment' })
  },
  
  /**
   * 跳转到健康数据总览页面
   */
  goToHealthData() {
    wx.navigateTo({ url: '/pages/healthData/healthData' })
  },
  
  /**
   * 跳转到血糖详情页面
   */
  goToGlucoseDetail() {
    wx.navigateTo({ url: '/pages/glucoseDetail/glucoseDetail' })
  },
  
  /**
   * 跳转到血压详情页面
   */
  goToBloodPressureDetail() {
    wx.navigateTo({ url: '/pages/bloodPressureDetail/bloodPressureDetail' })
  },
  
  /**
   * 跳转到体重详情页面
   */
  goToWeightDetail() {
    wx.navigateTo({ url: '/pages/weightDetail/weightDetail' })
  },
  
  /**
   * 跳转到预防方案页面
   */
  goToPreventionPlan() {
    wx.navigateTo({ url: '/pages/preventionPlan/preventionPlan' })
  },
  
  /**
   * 跳转到饮食计划页面
   */
  goToDietPlan() {
    wx.navigateTo({ url: '/pages/dietPlan/dietPlan' })
  },
  
  /**
   * 跳转到运动计划页面
   */
  goToExercisePlan() {
    wx.navigateTo({ url: '/pages/exercisePlan/exercisePlan' })
  },
  
  /**
   * 跳转到监测计划页面
   */
  goToMonitoringPlan() {
    wx.navigateTo({ url: '/pages/monitoringPlan/monitoringPlan' })
  },
  
  /**
   * 跳转到知识中心页面
   */
  goToKnowledgeCenter() {
    wx.navigateTo({ url: '/pages/knowledgeCenter/knowledgeCenter' })
  },
  
  /**
   * 跳转到知识详情页面
   */
  goToKnowledgeDetail(e) {
    const id = e.currentTarget.dataset.id
    wx.navigateTo({ url: `/pages/knowledgeDetail/knowledgeDetail?id=${id}` })
  },

  /**
   * 点击健康服务
   */
  onServiceTap(e) {
    const type = e.currentTarget.dataset.type
    
    // 由于健康服务功能已移除，显示功能尚未开放的提示
    wx.showToast({
      title: '该功能尚未开放',
      icon: 'none',
      duration: 2000
    })
  },

  /**
   * 处理工具点击事件
   */
  onToolTap(e) {
    const type = e.currentTarget.dataset.type
    const pages = {
      monitor: '/pages/monitor/monitor',
      target: '/pages/target/target',
      device: '/pages/device/device',
      remind: '/pages/reminders/reminders',
      consult: '/pages/consult/consult',
      export: '/pages/exportData/exportData'
    }
    if (pages[type]) {
      wx.navigateTo({ url: pages[type] })
    }
  },

  /**
   * 处理设置项点击事件
   * @param {Object} e - 点击事件对象
   */
  onSettingTap(e) {
    const type = e.currentTarget.dataset.type
    
    // 根据不同的设置类型执行不同的操作
    if (type === 'userInfo') {
      // 跳转到用户详情页
      wx.navigateTo({ 
        url: '/pages/userDetail/userDetail'
      })
    } else if (type === 'userCategory') {
      // 跳转到用户分类页面
      wx.navigateTo({ 
        url: '/pages/userCategory/userCategory'
      })
    } else if (type === 'healthTarget') {
      // 跳转到健康目标页面
      wx.navigateTo({ 
        url: '/pages/healthTarget/healthTarget'
      })
    } else if (type === 'privacy') {
      // 跳转到隐私设置页面
      wx.navigateTo({ 
        url: '/pages/privacySettings/privacySettings'
      })
    } else if (type === 'logout') {
      // 显示注销确认弹窗
      wx.showModal({
        title: '注销确认',
        content: '确定要退出登录吗？',
        confirmText: '确认退出',
        confirmColor: '#FF3B30',
        cancelText: '取消',
        success: (res) => {
          if (res.confirm) {
            // 用户点击确认，执行退出登录操作
            this.logoutAccount()
          }
        }
      })
    }
  },

  /**
   * 退出登录
   */
  async logoutAccount() {
    try {
      // 显示加载提示
      wx.showLoading({
        title: '退出中...'
      })
      
      // 清除token和用户信息
      wx.removeStorageSync('token')
      app.globalData.token = null
      app.globalData.userInfo = null
      app.globalData.isLoggedIn = false
      
      // 隐藏加载提示
      wx.hideLoading()
      
      // 跳转到登录页
      wx.reLaunch({
        url: '/pages/login/login'
      })
    } catch (err) {
      // 隐藏加载提示
      wx.hideLoading()
      
      console.error('退出登录失败:', err)
      wx.showToast({
        title: '退出登录失败，请重试',
        icon: 'none'
      })
    }
  },

  /**
   * 获取风险等级颜色
   * @returns {string} 风险等级对应的颜色
   */
  getRiskLevelColor() {
    // 这个方法不再需要返回具体的颜色值，因为我们现在使用CSS类
    // 但保留此方法以避免其他地方可能使用而产生错误
    
    // 导入风险评估API获取颜色
    const riskAssessmentApi = require('../../utils/api/riskAssessment');
    if (!this.data.healthInfo || !this.data.healthInfo.riskLevel) {
      return riskAssessmentApi.getRiskLevelColor('unknown');
    }
    
    return riskAssessmentApi.getRiskLevelColor(this.data.healthInfo.riskLevel);
  },

  /**
   * 获取风险等级文本
   * @returns {string} 风险等级描述
   */
  getRiskLevelText() {
    // 导入风险评估API获取文本
    const riskAssessmentApi = require('../../utils/api/riskAssessment');
    if (!this.data.healthInfo || !this.data.healthInfo.riskLevel) {
      console.log('获取风险等级文本 - 未找到风险等级数据');
      return riskAssessmentApi.getRiskLevelText('unknown');
    }
    
    console.log('获取风险等级文本 - 当前风险等级:', this.data.healthInfo.riskLevel);
    return riskAssessmentApi.getRiskLevelText(this.data.healthInfo.riskLevel);
  },

  /**
   * 分享健康卡片
   */
  shareHealthCard() {
    // 生成健康卡片并分享
    wx.showToast({
      title: '功能开发中',
      icon: 'none'
    })
  },

  // 打开开发者设置页面
  openDevSettings() {
    wx.navigateTo({
      url: '/pages/settings/devSettings'
    });
  },

  // 跳转到测试数据生成器
  goToDataGenerator() {
    wx.navigateTo({
      url: '/pages/test/datagen'
    })
  }
}) 